/*
 * @Author: jijianpeng 1308913982@qq,com
 * @Date: 2022-08-15 10:18:45
 * @LastEditors: jijianpeng 1308913982@qq,com
 * @LastEditTime: 2022-08-30 16:50:10
 * @FilePath: \zmglpt-mobile\src\components\mescroll-uni\mixins\mescroll-more.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
/**
 * mescroll-body写在子组件时, 需通过mescroll的mixins补充子组件缺少的生命周期
 */
const MescrollMoreMixin = {
  data() {
    return {
      tabIndex: 0, // 当前tab下标
      mescroll: {
        onPageScroll: e => {
          this.handlePageScroll(e)
        },
        onReachBottom: () => {
          this.handleReachBottom()
        },
        onPullDownRefresh: () => {
          this.handlePullDownRefresh()
        },
      },
    }
  },
  // 因为子组件无onPageScroll和onReachBottom的页面生命周期，需在页面传递进到子组件
  onPageScroll(e) {
    this.handlePageScroll(e)
  },
  onReachBottom() {
    this.handleReachBottom()
  },
  // 当down的native: true时, 还需传递此方法进到子组件
  onPullDownRefresh(){
    this.handlePullDownRefresh()
  },
  methods:{
    handlePageScroll(e){
      let mescroll = this.getMescroll(this.tabIndex);
      mescroll && mescroll.onPageScroll(e);
    },
    handleReachBottom(){
      let mescroll = this.getMescroll(this.tabIndex);
      mescroll && mescroll.onReachBottom();
    },
    handlePullDownRefresh(){
      let mescroll = this.getMescroll(this.tabIndex);
      mescroll && mescroll.onPullDownRefresh();
    },
    // 根据下标获取对应子组件的mescroll
    getMescroll(i){
      if(!this.mescrollItems) this.mescrollItems = [];
      if(!this.mescrollItems[i]) {
        // v-for中的refs
        let vForItem = this.$refs["mescrollItem"];
        if(vForItem){
          this.mescrollItems[i] = vForItem[i]
        }else{
          // 普通的refs,不可重复
          this.mescrollItems[i] = this.$refs["mescrollItem" + i];
        }
      }
      let item = this.mescrollItems[i]
      return item ? item.mescroll : null
    },
    // 切换tab,恢复滚动条位置
    tabChange(i){
      let mescroll = this.getMescroll(i);
      if(mescroll){
        // 延时(比$nextTick靠谱一些),确保元素已渲染
        setTimeout(() => {
          mescroll.scrollTo(mescroll.getScrollTop(),0)
        },30)
      }
    },
  },
}

export default MescrollMoreMixin;
